package com.llu.sha;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SHA1Code {
        /**
         * 生成给定字符串的 SHA-1 哈希值。
         *
         * @param decript 要进行哈希处理的字符串。
         * @return 返回十六进制形式的 SHA-1 哈希值。如果发生错误，则返回空字符串。
         */
    public static String sha1Code(final String decript) {
        try {
            // 获取 SHA-1 消息摘要实例
            MessageDigest digest = java.security.MessageDigest
                    .getInstance("SHA-1");
            // 使用输入字符串的字节更新摘要
            digest.update(decript.getBytes());
            // 获取摘要值作为字节数组
            byte messageDigest[] = digest.digest();
            // 创建 Hex 字符串
            StringBuffer hexString = new StringBuffer();
            // 将字节数组转换为十六进制字符串
            for (int i = 0; i < messageDigest.length; i++) {
                // 将每个字节转换为十六进制字符串，并确保它是两位数的十六进制数
                String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
                if (shaHex.length() < 2) {
                    // 如果转换后的十六进制数字长度小于 2，则在其前添加 0 以构成两位数
                    hexString.append(0);
                }
                // 将十六进制字符串添加到 StringBuffer 中
                hexString.append(shaHex);
            }
            // 返回最终的十六进制字符串形式的哈希值
            return hexString.toString();

        } catch (NoSuchAlgorithmException e) {
            // 处理找不到 SHA-1 算法的情况
            e.printStackTrace();
        }
        // 如果出现异常，则返回空字符串
        return "";
    }

}
